Skip to main content

Contributors: Jellejurre, JustSleightly

Built-In VRC Parameters

There are certain parameters that are set by VRChat automatically. These parameters will be set on any Playable Layer (such as the FX Layer) for you. VRChat’s own article on this is actually pretty good, so this article adds some common use cases and caveats where applicable.

Example: If you add a parameter called IsLocal to your FX Layer, it will automatically be set to True or False* based on whether or not the avatar is being played locally or remotely.

note

These parameters are read-only and will not be set on sub animators, only Playable Layer animators.

tip

The value parameters are set depending on the type of the Parameter. They follow the rules of Expression Parameter Mismatching, so for example IsLocal as a float would be set to 0.0 or 1.0, while a bool would be set to True or False. Be careful when mismatching Built-In parameters however, as having two of the same parameter with different types will break your Animator Controller, so if people merge other controllers that use the parameter with the original type, this will break the Animator Controller.

Parameter NameParameter DescriptionParameter TypeSync TypeExample Use Cases
IsLocalTrue if the avatar is being worn locally, false otherwise. So when in a lobby, your own avatar has IsLocal set to True, and all the avatars around you have IsLocal set to falseBoolPlayableComplex systems perform logic locally and just visualize remotely
VisemeIf the Avatar Descriptor’s Lip Sync is set to Viseme Blend Shape or Viseme Parameter Only, animates the value from 0 to 14 based on the following viseme values: 0: sil, 1: pp, 2: ff, 3: th, 4: dd, 5: kk, 6: ch, 7: ss, 8: nn, 9: rr, 10: aa, 11: e, 12: i, 13: o, 14: u

If the Avatar Descriptor’s Lip Sync is set to Jaw Bone Flap or Jaw Flap Blend Shape, animates the value from 0 to 100 based on volume
IntSpeechAnimating a second head’s visemes
VoiceMicrophone Volume, from 0.0 to 1.0. Note that this is perceived volume, so it’s affected by earmuffs and distanceFloatSpeechUsed to animate properties based on voice like pseudo-audiolink
GestureLeftThe gesture performed by the left hand. 0: Neutral, 1: Fist, 2: HandOpen, 3: FingerPoint, 4: Victory, 5: RockNRoll, 6: HandGun, 7: ThumbsUpIntIKUsed for any system that responds to gestures, as well as facial expressions and hand gestures. More at Hand Gestures/Facial Expressions
GestureRightThe gesture performed by the right hand. 0: Neutral, 1: Fist, 2: HandOpen, 3: FingerPoint, 4: Victory, 5: RockNRoll, 6: HandGun, 7: ThumbsUpIntIKUsed for any system that responds to gestures, as well as facial expressions and hand gestures. More at Hand Gestures/Facial Expressions
GestureLeftWeightThe Analog trigger value on the left hand. For Quest controllers this is the side button, for Index/Vive controllers this is the trigger.
Note that during the Fist gesture, this a smooth transition between 0-1, but during other gestures, it’s flat 1 or 0
FloatPlayableUsed for controlling systems which need more precise input, possibly used in facial expression and hand gestures. More at Hand Gestures/Facial Expressions
GestureRightWeightThe Analog trigger value on the right hand. For Quest controllers this is the side button, for Index/Vive controllers this is the trigger.
Note that during the Fist gesture, this a smooth transition between 0-1, but during other gestures, it’s flat 1 or 0
FloatPlayableUsed for controlling systems which need more precise input, possibly used in facial expression and hand gestures. More at Hand Gestures/Facial Expressions
AngularYHow fast the user is spinning (caps at -1024, 1024)
Note that locally, playspace moving doesn’t count, but remotely it does
FloatIKUsed for systems where the user’s angular velocity is needed
VelocityXThe Left-Right movement speed in m/s
Note that locally, playspace moving doesn’t count, but remotely it does
FloatIKUsed for locomotion and other systems where the user’s velocity is needed
VelocityYDown-Up movement speed in m/s
Note that locally, playspace moving doesn’t count, but remotely it does
FloatIKUsed for locomotion and other systems where the user’s velocity is needed
VelocityZBack-Forward movement speed in m/s
Note that locally, playspace moving doesn’t count, but remotely it does
FloatIKUsed for locomotion and other systems where the user’s velocity is needed
VelocityMagnitudeThe total magnitude of the velocity, calculated as x2+y2+z2\sqrt{x^2 + y^2 + z^2}
Note that locally, playspace moving doesn’t count, but remotely it does
FloatIKUsed for locomotion and other systems where the user’s velocity is needed
UprightHow "upright" the user is. 0 is prone, 1 is standing straight upFloatIKUsed for Locomotion to determine crouching/sitting/standing
GroundedWhether or not the user is touching the groundBoolIKUsed to detect jumping
SeatedTrue if the user is in a Station with the Seated flag enabled. More information can be found at the Stations page.BoolIKUsed to play sitting animations
AFKIs the user AFK, which means headset inactive (VR) or the user has pressed the End key (desktop)BoolIKUsed to play AFK animations.
Expression1 - Expression16A remnant from early 3.0. Has no use for us now, except for that we shouldn’t name our own parameters this.Int / FloatIK or Playable-
TrackingTypeUsed to determine the tracking type the user has: 0: Uninitialized, 1: Generic rig, 2: AV2 avatar, 3:Head and Hands tracking if VR, or humanoid if Desktop, 4: 4-point tracking, Head, hands, hip, 5: Full body tracking, Head, hands, hip, feetIntPlayableUsed for locomotion to switch between different animation types
VRModeReturns 1 if the user is in VR, 0 if they are notIntIKUsed for systems that have different interfaces between Desktop and VR
MuteSelfWhether or not the user is MutedBoolPlayableUsed to display “I am muted” effects
InStationWhether or not the user is in a station. Note that not every station immobilizes the userBoolIK-
EarmuffsWhether or not the user is using EarmuffsBoolPlayableUsed to display “I am using earmuffs” effects
IsOnFriendsListWhether or not the user viewing the avatar is friends with the user wearing it (shows False locally)BoolOtherUsed to conditionally show/hide features from non-friends
AvatarVersionSet to 3.0 on SDK3 avatars, not set on SDK2 avatars (so will retain default values)FloatNoneUsed in stations to determine the type of avatar to be dealt with. You can check AvatarVersion < 3.0 to check this.
ScaleModifiedReturns true if the user is scaled using avatar scaling, false if the avatar is at its default size.BoolPlayable-
ScaleFactorRelation between the avatar's default height and the current height. An avatar with a default eye-height of 1m scaled to 2m will report 2.FloatPlayableUsed as a fix for scaling animations, but not great for systems since they rely on upload height. More at Designing Scale-Friendly Systems
ScaleFactorInverseInverse relation (1/x) between the avatar's default height and the current height. An avatar with a default eye-height of 1m scaled to 2m will report 0.5. Might be inaccurate at extremes.FloatPlayableUsed as a fix for scaling animations, but not great for systems since they rely on upload height. More at Designing Scale-Friendly Systems
EyeHeightAsMetersThe avatar's eye height in meters.FloatPlayableUsed as a fix for scaling, the only parameter that is both linear, and doesn’t rely on upload height. Recommended parameter to use for scaling fixes. More at Designing Scale-Friendly Systems
EyeHeightAsPercentRelation of the avatar's eye height in meters relative to the default scaling limits (0.2-5.0). An avatar scaled to 2m will report (2.0 - 0.2) / (5.0 - 0.2) = 0.375.FloatPlayableUsed as a fix for scaling, will be outside the 0-1 range if the world allows big scaling. More at Designing Scale-Friendly Systems

Sync Mode

There are three sync types:

  • Speech: Only used for Visemes and other Speech-related variables. Synced as fast as audio syncs, since it’s directly driven by the audio
  • Playable: A sync mode which updates every 0.1 to 1 second as needed based on parameter changes. VRC Expression Parameters are synced with Playable sync
  • IK: A sync which always syncs every 0.1 seconds, and interpolates float values for remote users. IK (so placement of humanoid bones) is also synced with IK sync

Last Updated: 01 April 2024 11:16:00